package com.shujia.zookeeper;

import org.apache.curator.framework.api.CreateModable;
import org.apache.zookeeper.*;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class Code02CreateNode {
    public static void main(String[] args) throws IOException, InterruptedException, KeeperException {

        ZooKeeper zooKeeper = new ZooKeeper("master:2181,node1:2181,node2:2181"
                , 10 * 1000
                , new Watcher() {
            @Override
            // 该方法在Zookeeper连接中会被触发两次，一次在建立连接时，另外一次在关闭连接时
            // 该方法执行时，是按照异步执行
            public void process(WatchedEvent event) {
                System.out.println("当前Zookeeper连接被触发...");
            }
        }
        );

        /**
         * String path：节点路径
         * byte data[]：节点中存储的数据
         *
         * List<ACL> acl: 对应节点的权限信息，可以通过 ZooDefs.Ids枚举类获取
         *      权限共有三种方式：
         *          1.OPEN_ACL_UNSAFE 表示对于所有用户有读写权限
         *          2.CREATOR_ALL_ACL 表示只有写权限
         *          3.READ_ACL_UNSAFE 表示只有读权限
         * CreateMode createMode :对应节点的类型
         *      节点类型：
         *          1.PERSISTENT 持久化节点
         *          2.PERSISTENT_SEQUENTIAL 持久化序列化节点
         *          3.EPHEMERAL 临时节点(当连接关闭时，该节点消失)
         *          4.EPHEMERAL_SEQUENTIAL 临时节点序列化
         *          5.CONTAINER 容器节点，当该节点中不存在子节点时，该节点消失
         *          6.PERSISTENT_WITH_TTL 给持久化节点添加倒计时
         *          7.PERSISTENT_SEQUENTIAL_WITH_TTL 给持久化序列化节点添加倒计时
         *
         * public String create(final String path, byte data[], List<ACL> acl,
         *             CreateMode createMode)
         */
        zooKeeper.create("/api","first Create".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

        zooKeeper.close();



    }
}
